package liurong.driver.ics;

import org.junit.Test;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Recur;
import net.fortuna.ical4j.model.WeekDay;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.Location;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.RRule;
import net.fortuna.ical4j.model.property.TzId;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.util.RandomUidGenerator;

public class ICSTest {
	@Test
	public void exportFile() {
		try {
			// 创建一个时区（TimeZone）
			// TimeZoneRegistry registry =
			// TimeZoneRegistryFactory.getInstance().createRegistry();
			// TimeZone timezone = registry.getTimeZone("Asia/Shanghai");
			// VTimeZone tz = timezone.getVTimeZone();

			// 创建日历
			Calendar calendar = new Calendar();
			calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
			calendar.getProperties().add(Version.VERSION_2_0);
			calendar.getProperties().add(CalScale.GREGORIAN);

			// 时间主题
			String summary = "重复事件测试";
			// 开始时间
			DateTime start = new DateTime(System.currentTimeMillis());
			// 开始时间转换为UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
			start.setUtc(true);
			// 结束时间
			DateTime end = new DateTime(System.currentTimeMillis() + 1000 * 60 * 60);
			// 结束时间设置成UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
			end.setUtc(true);
			// 新建普通事件
			// VEvent event = new VEvent(start, end, summary);
			// 定义全天事件（注意默认是UTC时间）
			VEvent event = new VEvent(start, end, summary);
			event.getProperties().add(new Location("南京堵路"));
			// 生成唯一标示
			// event.getProperties().add(new Uid(new
			// UidGenerator("iCal4j").generateUid().getValue()));
			event.getProperties().add(new RandomUidGenerator().generateUid());
			// 添加时区信息
			event.getProperties().add(new TzId("America/Chicago"));

			// 添加邀请者
			// Attendee dev1 = new
			// Attendee(URI.create("mailto:dev1@mycompany.com"));
			// dev1.getParameters().add(Role.REQ_PARTICIPANT);
			// dev1.getParameters().add(new Cn("Developer 1"));
			// event.getProperties().add(dev1);
			// 重复事件
			// Recur recur = new Recur(Recur.WEEKLY, Integer.MAX_VALUE);
			// recur.getDayList().add(WeekDay.MO);
			// recur.getDayList().add(WeekDay.TU);
			// recur.getDayList().add(WeekDay.WE);
			// recur.getDayList().add(WeekDay.TH);
			// recur.getDayList().add(WeekDay.FR);
			// RRule rule = new RRule(recur);
			// event.getProperties().add(rule);
			// 提醒,提前10分钟
			// VAlarm valarm = new VAlarm(new Dur(0, 0, -10, 0));
			// valarm.getProperties().add(new Summary("Event Alarm"));
			// valarm.getProperties().add(Action.DISPLAY);
			// valarm.getProperties().add(new Description("Progress Meeting at
			// 9:30am"));
			// 将VAlarm加入VEvent
			// event.getAlarms().add(valarm);
			// 添加事件
			calendar.getComponents().add(event);
			// 验证
			calendar.validate();
			// FileOutputStream fout = new FileOutputStream("D://4.ics");
			// CalendarOutputter outputter = new CalendarOutputter();
			// outputter.output(calendar, fout);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Test
	public void fun2() {
		try {
			// 创建日历
			Calendar calendar = new Calendar();
			calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
			calendar.getProperties().add(Version.VERSION_2_0);
			calendar.getProperties().add(CalScale.GREGORIAN);
			// 时间主题
			String summary = "重复事件测试";
			// 开始时间
			DateTime start = new DateTime(System.currentTimeMillis());
			// 开始时间转换为UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
			start.setUtc(true);
			// 结束时间
			DateTime end = new DateTime(System.currentTimeMillis() + 1000 * 60 * 60);
			// 结束时间设置成UTC时间（UTC ＋ 时区差 ＝ 本地时间 ）
			end.setUtc(true);
			// 新建普通事件
			// 定义全天事件（注意默认是UTC时间）
			VEvent event = new VEvent(start, end, summary);
			event.getProperties().add(new Location("南京堵路"));
			// 生成唯一标示
			event.getProperties().add(new RandomUidGenerator().generateUid());
			// 添加时区信息
			event.getProperties().add(new TzId("America/Chicago"));

			// 添加事件
			calendar.getComponents().add(event);
			// 验证
			calendar.validate();
			System.out.println(calendar.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Test
	public void fun3() {
		// WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR
		// FREQ=MONTHLY;INTERVAL=1;BYMONTHDAY=15
		String[] split = "WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR".split("[;=]");
		for (String string : split) {
			System.out.println(string);
		}
		System.out.println(WeekDay.Day.valueOf("SU"));
	}
}
